<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>回调</title>
</head>
<body>
    <button onclick="test1()">test ajax</button>
</body>
<script>
    function ajax(options) {
        options = options || {} // options默认空对象
        options.type = (options.type || "GET").toUpperCase(); // 请求格式GET、POST，默认为GET
        options.dataType=options.dataType || "json" //响应数据格式，默认json

        var params = formatParams(options.data)

        var xhr;
        // 考虑兼容
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        } else if (window.ActiveXObject) { // 兼容ie6以下版本
            xhr = new ActiveXObject('Microsoft.XMLHTTP');
        }

        // 启动并发送一个请求
        if (options.type == "GET") {
            var url = params ? options.url+"?"+params : options.url
            xhr.open("GET", url, true);
            xhr.send(null)
        } else if (options.type == 'POST') {
            xhr.open('post', options.url, true)
            //设置表单提交时的内容类型
            //Content-type数据请求的格式
            xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            xhr.send(params);
        }

        // 设置有效时间
        // setTimeout(function () {
        //     if (xhr.readyState!=4) {
        //         xhr.abort();
        //     }
        // },options.timeout)

        // 接收
        // options.success成功之后的回调函数  options.error失败后的回调函数
        xhr.onreadystatechange=function () {
            if (xhr.readyState==4) {
                var status = xhr.status;
                if (status>=200 && status<300 || status==304) {
                    options.success && options.success(xhr.responseText, xhr.responseXML);
                } else {
                    options.error && options.error(status)
                }
            }
        }
    }
    //格式化请求参数
    function formatParams(data) {
        var arr = []
        for (var name in data) {
            arr.push(encodeURIComponent(name)+"="+encodeURIComponent(data[name]))
        }
        // arr.push(("v="+Math.random()).replace(".",""));
        return arr.join('&')
    }

    function test1 () {
        ajax({
            url: "http://localhost:8083/sso/test/sso/getMenu",
            success: function (data) {
                console.log('data',data)
            },
            error: function (e) {
                console.log('e',e)
            }
        })
    }
</script>
<script src="callback.js"></script>
</html>
